package com.factory.server.dao;

import com.factory.server.bo.AbstractBusinessObject;


/**
 * Dispatcher, ktery rozesle genericke pozadavky na specificke dao, pokud je nejake k dane entite
 * registrovane, pripadne na genericke dao, pokud zadne specificke registrovane neni.
 *
 * Timto se zajisti snadna vymena funkcionality specificke pro danou entitu (napr. save),
 * pokud se na ni pri drivejsim porgramovani nemyslelo a pouzivala se pouze genericka volani.
 * @author Pavel Micka (mickapa1@fel.cvut.cz)
 */
public interface DAODispatcherIface extends GenericDAOIface {

    /**
     * Zaregistruje dane DAO k odebirani generickych pozadavku tykajicich se dane entity
     * @param <ENTITY> entita, jiz se pozadavky tykaji
     * @param specificDAO dajo, jez bude tyto pozadavky zpracovavat
     * @param clazz trida odpovidajici entite
     */
    public <ENTITY extends AbstractBusinessObject> void register(SpecificDAOIface<ENTITY> specificDAO, Class<ENTITY> clazz);

    /**
     * Odregistruje dane DAO z odebirani generickych pozadavku tykajicich se dane entity
     * @param <ENTITY> entita, jiz se pozadavky tykaji
     * @param clazz trida odpovidajici entite
     */
    public <ENTITY extends AbstractBusinessObject> void unregister(Class<ENTITY> clazz);
}
